#ifndef BPE_VECTOR_3D
#define BPE_VECTOR_3D

#include "BPEPoint3d.h"
class BPEVector3d{

private:
	BPEPoint3d tail;
	BPEPoint3d head;

public:
	BPEVector3d();
	BPEVector3d(const double &x,const double &y,const double &z);
	BPEVector3d(const BPEPoint3d &tail, const BPEPoint3d &head);
	BPEVector3d(const BPEPoint3d &tail, const double &radsXY, const double &radsXZ,const double &magnitude);


	BPEPoint3d getHead();
	BPEPoint3d getTail();

	void setHead(const BPEPoint3d &h);
	void setTail(const BPEPoint3d &t);

	double getXYRads();
	double getZYRads();
	double getXZRads();
	double getMagnitude();

	void normalize();
	void setMagnitude(double mag);

	void moveTo(const BPEPoint3d &t);
	BPEVector3d add(BPEVector3d v);
	double dotProduct(BPEVector3d other);
	BPEVector3d crossProduct(const BPEVector3d &other);
	double findRadsDifference(BPEVector3d other);
	BPEVector3d getReflectionAgaintNormal(BPEVector3d normal);

	void inverse();

	double distanceFromAPoint(const BPEPoint3d &p);


	void rotateXY(double rads); //on rads
	void rotateZY(double rads);
	void rotateXZ(double rads);

	BPEVector3d operator-(BPEVector3d other);
	BPEVector3d operator*(double scalar);
	BPEVector3d operator/(double scalar);
	
};


#endif 